/**
 * RedisClient/com.ruixin.redisclient.utils/EnderUtils.java
 */
package ender.utils;

import java.lang.reflect.Method;

/**
 * @author chenxiwen
 * @date 2017年7月25日下午4:55:25
 */
public final class EnderUtil {

    /**
     * 获取当前行代码的文件名
     * @return
     */
    public static String getFileName(){
        return Thread.currentThread().getStackTrace()[2].getFileName();
    }
    
    /**
     * 获取当前行代码的方法名
     * @return
     */
    public static String getMethodName(){
        return Thread.currentThread().getStackTrace()[2].getMethodName();
    }
    
    /**
     * 获取当前行的行号
     * @return
     */
    public static int getLineNumber(){
        return Thread.currentThread().getStackTrace()[2].getLineNumber();
    }
    /**
     * 获取当前行的[文件名 - 方法名 - 行号]
     * @return
     */
    public static String getDevInfo(){
        return "["+Thread.currentThread().getStackTrace()[2].getFileName()+" - "+Thread.currentThread().getStackTrace()[2].getMethodName()+" - "+Thread.currentThread().getStackTrace()[2].getLineNumber()+"]";
    }
    
    /**
     * 封装的Thread.sleep();
     * @param millseconds
     */
    public static void block(long millseconds){
        try {
            Thread.sleep(millseconds);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 根据方法名和参数获取指定的方法
     * @param c
     * @param methodName
     * @param paramTypes
     * @return
     * @throws NoSuchMethodException
     * @throws SecurityException
     */
    public static <T> Method getMethodByName(Class<T> c, String methodName, Class<?>... paramTypes) throws NoSuchMethodException, SecurityException{
        return c.getDeclaredMethod(methodName, paramTypes);
    }
    
    
    
    public static void main(String[] args){
        System.out.println(getLineNumber());
        System.out.println(getMethodName());
        System.out.println(getDevInfo());
    }
}
